package collection

import (
	"sort"
)

// SortBy 创建一个元素数组。 以 iteratee 处理的结果升序排序。
// 这个方法执行稳定排序，也就是说相同元素会保持原始排序。 iteratees 调用1个参数： (value)。
func SortBy(array []T, iteratee func(value T) V) []T {
	var valueArr []T
	for _, value := range array {
		valueArr = append(valueArr, value)
	}
	sort.SliceStable(valueArr, func(i, j int) bool {
		return iteratee(valueArr[i]) < iteratee(valueArr[j])
	})
	return valueArr
}
